﻿''' <summary>
''' Fichero que contiene la clase Usuario
''' </summary>
''' <author>Juan David Cabezuelo, Arturo Sirvent, Fermín Martínez, Eugenio Cañete y Pablo Vicedo</author>
Public Class Usuario

    Private _NIF As String
    Private _Nombre As String
    Private _Apellidos As String
    Private _Telefono As Integer
    Private _Usuario As String
    Private _Contraseña As String
    Private _IdRol As Integer

    ''' <summary>
    ''' Constructor vacío
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()
        Me._NIF = ""
        Me._Nombre = ""
        Me._Apellidos = ""
        Me._Telefono = 0
        Me._Usuario = ""
        Me._Contraseña = ""
        Me._IdRol = 0
    End Sub

    ''' <summary>
    ''' Constructor con parámetros que inserta el objeto automaticamente en la bd.
    ''' </summary>
    ''' <param name="nif"></param>
    ''' <param name="nombre"></param>
    ''' <param name="apellidos"></param>
    ''' <param name="telefono"></param>
    ''' <param name="usuario"></param>
    ''' <param name="contraseña"></param>
    ''' <param name="idRol"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal nif As String, ByVal nombre As String, ByVal apellidos As String, _
                   ByVal telefono As Integer, ByVal usuario As String, ByVal contraseña As String, _
                   ByVal idRol As Integer)

        If (nif.Length >= 8 And nif.Length <= 10) Then
            Me._NIF = nif
        Else
            Throw New ArgumentException("El NIF tiene que tener entre 8 y 10 caracteres")
        End If

        If ValidarCadena(nombre, 50, True) Then
            Me._Nombre = nombre
        Else
            Throw New ArgumentException("El nombre no puede exceder de 50 caracteres ni estar vacío")
        End If

        If ValidarCadena(apellidos, 50, True) Then
            Me._Apellidos = apellidos
        Else
            Throw New ArgumentException("Los apellidos no puede exceder de 50 caracteres ni estar vacío")
        End If

        Me._Telefono = telefono

        If ValidarCadena(usuario, 50, True) Then
            Me._Usuario = usuario
        Else
            Throw New ArgumentException("El usuario no puede exceder de 50 caracteres ni estar vacío")
        End If

        If ValidarCadena(contraseña, 50, True) Then
            Me._Contraseña = contraseña
        Else
            Throw New ArgumentException("La contraseña no puede exceder de 50 caracteres ni estar vacío")
        End If

        Me._IdRol = idRol

        'Guardo en la base de datos de form automática
        Dim miBD = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBD.InsertarModificarBorrar("INSERT INTO Usuarios(NIF, Nombre," & _
                      "Apellidos, Telefono, Usuario, Contraseña, IdRol, Accesible) VALUES('" & Me._NIF & "' , '" & Me._Nombre & "' , '" & Me._Apellidos & "' , " & Me._Telefono & " , '" & Me._Usuario & _
                      "' , '" & Me._Contraseña & "' , " & Me._IdRol & " , " & -1 & ")")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al guardar juagador en la base de datos")
        Else
            MsgBox("Se ha insertado " & filasAfectadas & " jugador")
        End If
    End Sub

    ''' <summary>
    ''' Subproceso que se encarga de actualizar los datos de los usuarios en la base de datos.
    ''' </summary>
    ''' <param name="nif"></param>
    ''' <param name="nombre"></param>
    ''' <param name="apellidos"></param>
    ''' <param name="telefono"></param>
    ''' <param name="usuario"></param>
    ''' <param name="contraseña"></param>
    ''' <param name="idRol"></param>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub Actualizar(ByVal nif As String, ByVal nombre As String, ByVal apellidos As String, ByVal telefono As Integer, _
                          ByVal usuario As String, ByVal contraseña As String, ByVal idRol As Integer, ByVal id As Integer)

        If (nif.Length <= 8 And nif.Length >= 10) Then
            Throw New ArgumentException("El NIF tiene que tener entre 8 y 10 caracteres")
        End If
        If Not ValidarCadena(nombre, 50, True) Then
            Throw New ArgumentException("El nombre no puede exceder de 50 caracteres ni estar vacío")
        End If
        If Not ValidarCadena(apellidos, 50, True) Then
            Throw New ArgumentException("Los apellidos no puede exceder de 50 caracteres ni estar vacío")
        End If
        Me._Telefono = telefono
        If Not ValidarCadena(usuario, 50, True) Then
            Throw New ArgumentException("El usuario no puede exceder de 50 caracteres ni estar vacío")
        End If
        If Not ValidarCadena(contraseña, 50, True) Then
            Throw New ArgumentException("La contraseña no puede exceder de 50 caracteres ni estar vacío")
        End If
        Me._IdRol = idRol

        Dim miBD = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBD.InsertarModificarBorrar("UPDATE Usuarios SET NIF='" & nif & "', Nombre='" & nombre & "', Apellidos='" & apellidos & _
                       "', Telefono=" & telefono & ", Usuario='" & usuario & "', Contraseña ='" & contraseña & _
                       "', IdRol=" & idRol & " WHERE Id = " & id & ";")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al modificar usuario en la base de datos")
        Else
            MsgBox("Se ha actualizado " & filasAfectadas & " usuario")
        End If
    End Sub

    ''' <summary>
    ''' Subproceso que se encarga de eliminar a los usuarios de la base de datos.
    ''' </summary>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub Eliminar(ByVal id As Integer)
        MsgBox(id)
        Dim miBD = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBD.InsertarModificarBorrar("UPDATE Usuarios SET Accesible=0 WHERE Id = " & id & ";")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al eliminar usuario en la base de datos")
        Else
            MsgBox("Se ha eliminado " & filasAfectadas & " usuario")
            FormBajaUsuario.Close()
        End If
    End Sub
    'Propiedades
    Public Property NIF() As String
        Get
            Return Me._NIF
        End Get
        Set(value As String)
            If (value.Length >= 8 And NIF.Length <= 10) Then
                Me._NIF = value
            Else
                Throw New ArgumentException("El NIF tiene que tener entre 8 y 10 caracteres")
            End If
        End Set
    End Property

    Public Property Nombre() As String
        Get
            Return Me._Nombre
        End Get
        Set(value As String)
            If ValidarCadena(value, 50, True) Then
                Me._Nombre = value
            Else
                Throw New ArgumentException("El nombre no puede exceder de 50 caracteres ni estar vacío")
            End If
        End Set
    End Property

    Public Property Apellidos() As String
        Get
            Return Me._Apellidos
        End Get
        Set(value As String)
            If ValidarCadena(value, 50, True) Then
                Me._Apellidos = value
            Else
                Throw New ArgumentException("Los apellidos no puede exceder de 50 caracteres ni estar vacío")
            End If
        End Set
    End Property

    Public Property Telefono() As Integer
        Get
            Return Me._Telefono
        End Get
        Set(value As Integer)
            Me._Telefono = value
        End Set
    End Property

    Public Property Usuario() As String
        Get
            Return Me._Usuario
        End Get
        Set(value As String)
            If ValidarCadena(value, 50, True) Then
                Me._Usuario = value
            Else
                Throw New ArgumentException("El usuario no puede exceder de 50 caracteres ni estar vacío")
            End If
        End Set
    End Property

    Public Property Contraseña() As String
        Get
            Return Me._Contraseña
        End Get
        Set(value As String)
            If ValidarCadena(value, 50, True) Then
                Me._Contraseña = value
            Else
                Throw New ArgumentException("La contraseña no puede exceder de 50 caracteres ni estar vacío")
            End If
        End Set
    End Property

    Public Property Rol() As Integer
        Get
            Return Me._IdRol
        End Get
        Set(value As Integer)
            Me._IdRol = value
        End Set
    End Property

    ''' <summary>
    ''' Destructor.
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Dispose()
        Me._NIF = ""
        Me._Nombre = ""
        Me._Apellidos = ""
        Me._Telefono = 0
        Me._Usuario = ""
        Me._Contraseña = ""
        Me._IdRol = 0
    End Sub

    ''' <summary>
    ''' Destructor.
    ''' </summary>
    ''' <remarks></remarks>
    Protected Overrides Sub finalize()
        Me._NIF = ""
        Me._Nombre = ""
        Me._Apellidos = ""
        Me._Telefono = 0
        Me._Usuario = ""
        Me._Contraseña = ""
        Me._IdRol = 0
    End Sub
End Class
